<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>Title</title>
    <style>

    </style>
</head>
<body>
<script>
    /*
    *call()和apply()
    *   -这两个方法都是函数对象的方法，需要通过函数对象来调用
    *   -当函数调用call()和apply()都会调用函数执行
    *   -在调用call()和apply()可以将一个对象指定为第一个参数
    *           此时这个对象将会成为函数的this
    *
    *   -call（）方法可以将实参在对象之后一次传递
    *   -apply()方法需要将实参封装到一个数组中统一传递
    *
    *   -this的情况
    *       1.以函数形式调用时，this是window
    *       2.以方法的形式调用时，this是调用方法的对象
    *       3.以构造函数的形式调用时，this是新创建的那个对象
    *       4.使用call和apply调用时，this是指定的那个对象
    *
    *
    * */

    function fun1(){
        alert(this.name)

    }
    let obj2 = {
        name:'salina',
        sayName:function(){
            alert(this.name)
        }
    };
    // fun1.call(obj2)//salina



    function fun2(){
        this.sayName(4,5)
    }
    let obj3 = {
        name:'balala',
        sayName:function(a,b){
           console.log(a+b)
        }
    }
    fun2.call(obj3)//9





    function fun3(a,b){
        console.log(1,2)
    }
    let obj4 = {
        name:'balala',
        sayName:function(){
            console.log(1111)
        }
    }
    fun3.call(obj4,1,2)//1,2
    fun3.apply(obj4,[1,2])//1,2
</script>
</body>
</html>